class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 2: Análisis espacial y Percepción remota satelital óptica ### Pre-procesamiento satelital I Matías Pérez Evens <br> matias.perez@pucv.cl<br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Noviembre 2025</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## Contenidos .pull-left[ * Combinaciones de bandas. * Calibración radiométrica. (TOA radianza - TOA reflectancia) * Corrección atmosférica. * Filtros de calidad de la información satelital. * Compensación topográfica por iluminación. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ### Recordemos... <center><img src="data:image/png;base64,#firmas_espectrales.jpg" height="400px" /></center> --- ### Recordemos... <center><img src="data:image/png;base64,#vegetation_spectral_sign.png" height="500px" /></center> --- ### Recordemos... <center><img src="data:image/png;base64,#firma_vegetacion_eye.jpg" height="500px" /></center> --- ### Combinaciones de bandas <center><img src="data:image/png;base64,#pc_channels.jpg" height="500px" /></center> --- ### Combinaciones de bandas <center><img src="data:image/png;base64,#pc_channels_bands_rgb.jpg" height="370px" /></center> --- ### Combinaciones de bandas Desierto florido (Atacama, Chile). Imagen <b>Sentinel-2</b> del 14/oct/2025 en **Color Real** <center><img src="data:image/png;base64,#hca_rgb.jpg" height="450px" /></center> --- ### Combinaciones de bandas <center><img src="data:image/png;base64,#pc_channels_bands_nir.jpg" height="370px" /></center> --- ### Combinaciones de bandas Desierto florido (Atacama, Chile). Imagen <b>Sentinel-2</b> del 14/oct/2025 en **Falso Color** <center><img src="data:image/png;base64,#hca_nir.jpg" height="450px" /></center> --- ### Combinaciones de bandas <br> ``` r # librerias necesarias ---- library(terra) # Cargar archivo satelital skysat <- rast("SkySat_08_feb_2024.vina.tif") par(mfrow = c(1, 3)) # permite visualizar 3 plots horizontalmente plotRGB(skysat, r=3, g=2, b=1, stretch = "lin", axes = TRUE) plotRGB(skysat, r=4, g=2, b=1, stretch = "lin", axes = TRUE) plotRGB(skysat, r=3, g=4, b=1, stretch = "lin", axes = TRUE) dev.off() ``` --- ### Combinaciones de bandas <img src="data:image/png;base64,#2025_Procesamiento_I_files/figure-html/unnamed-chunk-2-1.png" width="100%" /> --- ### Combinaciones de bandas <b>Resumiendo...</b> -- Cada superficie tiene una **firma espectral única** (como una "huella digital") debido a la <b>interacción de la luz</b> con la estructura material del objeto en las <b>diferentes longitudes de onda</b>. -- Esto nos permite discriminar, o resaltar diferentes elementos de la superficie a través de las combinaciones de bandas, las cuales pueden ser: -- * <b>Color Real</b>: Combina las bandas de acuerdo al color que corresponden. Muestra la escena tal como la veríamos a simple vista. -- * <b>Falso Color</b>: "Colorea" las bandas espectrales en un color al que no corresponden naturalmente, muy útil para visualizar bandas fuera del espectro visible, como NIR y SWIR. --- ### Calibración Radiométrica <center><img src="data:image/png;base64,#sun_sensor_diagram.jpg" height="450px" /></center> --- ### Calibración Radiométrica En un gran número de sensores (TM, ETM+, OLI, ALI, etc.) se establece la conversión a **radianza espectral** en base a una **relación lineal** existente entre el **nivel digital bruto** y los valores de radianza. Aunque siempre se deben consultar los manuales de usuario de cada uno de los productos que estemos empleando. De tal forma que la ecuación que describre la radianza espectral, según Chander et al. (2009), es: <br> -- `$$L{\lambda}=G{rescale} * Q{cal}+B{rescale}$$` donde: $$ `\begin{align} L{\lambda}: && \text{Radianza espectral aparente (TOA)}\\ Q{cal}: && \text{Valor de píxel calibrado} \\ G{rescale}: && \text{Factor de ganancia específico para la banda}\\ && {[(W/(m^2 sr \mu m))/ND]}\\ B{rescale}: && \text{Factor de sesgo de escala específico para la banda}\\ && {[(W/(m^2 sr \mu m))]} \end{align}` $$ --- ### Calibración Radiométrica Es posible convertirla la radianza aparente (TOA) `\(L{\lambda}\)` a **reflectancia aparente** (TOA) `\(\rho_p\)` una magnitud relativa que expresa la fracción de energía solar reflejada, que luego es registrada por el sensor. Convertir a reflectancia **permite reducir los efectos de la posición del Sol** y de la geometría de adquisición, facilitando la comparación entre diferentes fechas. Para convertir la radianza a reflectancia se utiliza la siguiente ecuación: <br> -- `$$\rho_p = \frac{\pi \, L_{\lambda} \, d^2}{ESUN_{\lambda} \, \cos{\theta_s}}$$` donde: $$ `\begin{align} \rho_p &: \text{Reflectancia planetaria adimensional} \\ \pi &: \text{Constante matemática (≈ 3.14159)} \\ L_{\lambda} &: \text{Radianza espectral aparente (TOA)} \\ d &: \text{Distancia Tierra–Sol (en unidades astronómicas, AU)} \\ ESUN_{\lambda} &: \text{Irradiancia solar media exo-atmosférica para cada banda} \\ \theta_s &: \text{Ángulo cenital solar} \end{align}` $$ --- ### Calibración Radiométrica <center><img src="data:image/png;base64,#cal_rad_skysat.jpg" height="300px" /></center> --- ### Calibración Radiométrica <center><img src="data:image/png;base64,#skysat_esun.jpg" height="600px" /></center> --- ### Calibración Radiométrica ``` r #install.packages("satellite") library(satellite) # Calibración radiometrica: de ND a radianza TOA (manual) ---- TOA_rad_skysat <- skysat * 0.01 # factor escalado # 6.- Calibración radiometrica ND TOA reflectancia ---- ## proceso manual -------------------------------------- d <- calcEarthSunDist(date = "2024-02-08", formula = "ESA") # AU ESUN <- c(2009.28, 1820.25, 1583.3, 1114.22) # (W * m2 * sr1 * um1) pi <- pi # 3.14 ## transformar angulos a radianes ---------------------- sun_elev <- 65.4 * pi/180 # Sun elev radianes sun_azimuth <- 312.9 * pi/180 # Sun azimuth radianes sun_zenith <- (90 - 65.4) * pi/180 # solar zenith TOA_reflectance_skysat <- (pi * TOA_rad_skysat * d^2) / (ESUN * cos(90 - sun_elev)) ``` --- ### Calibración Radiométrica ``` r par(mfrow = c(1, 3)) hist(skysat[[1]], main = "Niveles digitales") hist(TOA_rad_skysat[[1]], main = "Radianza TOA") hist(TOA_reflectance_skysat[[1]], main = "Reflectancia TOA") ``` <center><img src="data:image/png;base64,#hist_corr.jpg" width="800px"/></center> --- ### Calibración Radiométrica <b>Resumiendo...</b> -- La calibración radiométrica es el proceso que convierte los valores numéricos registrados por el sensor (DN, *Digital numbers*) a mediciones físicas, ya sea radianza o reflectancia. -- * <b>Radianza</b>: Magnitud absoluta. Es la cantidad de energía electromagnetica emitida o reflejada por un objeto. Su unidad de medida es `\(W \cdot m^{-2} \cdot sr^{-1} \cdot \mu m^{-1}\)`. -- * <b>Reflectancia</b>: Magnitud relativa. Es la proporción entre la radianza reflejada por un objeto y la radianza incidente en el objeto. **No tiene unidad de medida**, ya que se expresa en porcentaje (0 a 100). Transformar la radianza TOA a reflectancia TOA es un paso intermedio para realizar correcciones atmosféricas, aunque la mayoría de los métodos de corrección atmosférica actuales hacen esta transformación de forma automática. -- <br><br> <b>Es necesario hacer una calibración radiométrica cada vez que trabajemos con imágenes satelitales. **Siempre deben revisar los manuales de uso de cada producto satelital.**</b> --- ### Corrección atmosférica <b> Reflectancia TOC o "Surface Reflectance" </b> <center><img src="data:image/png;base64,#refl_toc.jpg" height="450px"/></center> --- ### Corrección atmosférica <center><img src="data:image/png;base64,#CORRECCION_ATMOS.gif" width="900px"/></center> --- ### Corrección atmosférica <b> Tipos de correcciones atmosféricas:</b> * **Mediciones in situ** * **Mixtas**. Por ejemplo Landsat Ecosystem Disturbance Adaptative Processing System (LEPADS) y Land Surface Reflectance Code (LaSRC) * **A partir de modelos físicos de transferencia radiativa**. Por ejemplo: Second Simulation of a Satellite Signal in the Solar Spectrum (6S vector version), Multi-angle implementation of atmospheri correction (MAIAC). * **Con datos de la propia imagen**. Ejemplos: Simple Dark object Substraction (sDOS), Sen2cor, ACOLITE. --- ### Corrección atmosférica <b>Métodos darkest object substraction:</b> En la literatura podemos encontrar diferentes métodos DOS los cuales se basan en principios similares. **El paradigma inicial señala que algunos pixeles son cuerpos oscuros cuya reflectancia seria cercana a 0.** Esto indica que la radianza captada por el sensor de estos pixeles oscuros, estaría influida por el efecto de la bruma. <b>Para estos métodos se estima que los pixeles oscuros reflejan al menos entre el 1-2% de la energía. (0.01)</b> El método **darkest pixel subtraction (DOS)** busca reducir o eliminar este efecto de la bruma para obtener la reflectancia superficial. --- ### Corrección atmosférica <center><img src="data:image/png;base64,#dos.jpg" height="550px"/></center> --- ### Corrección atmosférica <center><img src="data:image/png;base64,#dos2.jpg" height="550px"/></center> --- ### Corrección atmosférica: comparación de métodos sDOS (1989) v/s DOS2 (1996) <b> Parametros iniciales sDOS (1989) </b> ``` r # librerias necesarias ---- library(raster) library(tidyverse) ## Corrección atmosferica metodo sDOS ---------- Tz <- 1 Tv <- 1 Edown <- 0 ## ---------------------------------------------- skysat_raster <- skysat %>% stack() B <- calcDODN(skysat_raster[[1]]) G <- calcDODN(skysat_raster[[2]]) R <- calcDODN(skysat_raster[[3]]) NIR <- calcDODN(skysat_raster[[4]]) DNm <- c(B,G,R,NIR) hazeValues <- DNm*0.01 ``` **La función calcDODN del paquete satellite calcula de forma automática los valores de radianza mínimos para cada banda, considerando n cantidad de píxeles (≈20% aprox.)** --- ### Corrección atmosférica: comparación de métodos sDOS (1989) v/s DOS2 (1996) <b> Cálculo de parametros finales sDOS (1989) </b> ``` r # Calculo de reflectancia minima del 1% L_001 <- 0.01 * (ESUN[1:4] * cos(sun_zenith) * Tz + Edown) * Tv / (pi * d^2) # Valores de bruma para cada banda, consideraando influencia atmosférica. SHV_rad <- hazeValues # Calculo de la influencia atmosférica en la radianza del sensor. L_haze <- SHV_rad[1:4] - L_001[1:4] # Corrección atmosférica sDOS (1989) SR_sDOS <- pi * (TOA_rad_skysat[[1:4]] - L_haze[1:4]) * d^2 / (Tv * ESUN[1:4] * cos(sun_zenith) * Tz) + Edown # visualización plotRGB(SR_sDOS, r=3, g=2, b=1, stretch = "lin", axes = TRUE, main = "Reflectancia superficial metodo sDOS") # guardar archivo writeRaster(SR_sDOS, filename = "Reflectancia_superficial_metodo_sDOS.tif", overwrite = T) ``` --- ### Corrección atmosférica: comparación de métodos sDOS (1989) v/s DOS2 (1996) <b> Parametros iniciales DOS2 (1996) </b><br> El único parámetro que cambia es **Tz**, el resto son los mismos. ``` r ## Corrección atmosferica metodo DOS2 ---------- #Tz es el único parametro que cambia Tz <- cos(sun_zenith) # Corrección atmosférica DOS2(1996) SR_DOS2 <- pi * (TOA_rad_skysat[[1:4]] - L_haze[1:4]) * d^2 / (Tv * ESUN[1:4] * cos(sun_zenith) * Tz) + Edown # visualización plotRGB(SR_DOS2, r=3, g=2, b=1, stretch = "lin", axes = TRUE, main = "Reflectancia superficial metodo DOS2") # guardar archivo writeRaster(SR_DOS2, filename = "Reflectancia_superficial_metodo_DOS2.tif", overwrite = T) ``` --- ### Corrección atmosférica: comparación de métodos sDOS (1989) v/s DOS2 (1996) ``` r ### AED resultados obtenidos par(mfrow = c(2,3)) boxplot(TOA_reflectance_skysat[[2]], outline = F, main = "Boxplot TOA_ref", col = "green", ylim = c(0, 0.30)) boxplot(SR_sDOS[[2]], outline = F, main = "Boxplot sDOS", col = "lightblue", ylim = c(0, 0.30)) boxplot(SR_DOS2[[2]], outline = F, main = "Boxplot DOS2", col = "red", ylim = c(0, 0.30)) # ---------------------------------------------------- hist(TOA_reflectance_skysat[[2]]) hist(SR_sDOS[[2]]) hist(SR_DOS2[[2]]) dev.off() ``` --- ### Corrección atmosférica: comparación de métodos sDOS (1989) v/s DOS2 (1996) <center><img src="data:image/png;base64,#compare_dos.jpg" width="800px"/></center> --- ### Bibliografía Avdan & Jovanovska (2016) Algorithm for Automated Mapping of Land Surface Temperature Using LANDSAT 8 Satellite Data. Journal of Sensors. Volume 2016. https://doi.org/10.1155/2016/1480307 Gyanesh Chander, Brian L. Markham, Dennis L. Helder (2009) Summary of current radiometric calibration coefficients for Landsat MSS, TM, ETM+, and EO-1 ALI sensors, Remote Sensing of Environment, Volume 113, Issue 5, https://doi.org/10.1016/j.rse.2009.01.007. A. Barsi, J. L. Barker and J. R. Schott (2003) "An Atmospheric Correction Parameter Calculator for a single thermal band earth-sensing instrument," IGARSS 2003. 2003 IEEE International Geoscience and Remote Sensing Symposium. Proceedings (IEEE Cat. No.03CH37477), 2003, pp. 3014-3016 vol.5, doi: 10.1109/IGARSS.2003.1294665. King Michael D., Kaufman Yoram J., Tanré Didier, and Nakajima Teruyuki (1999) Remote Sensing of Tropospheric Aerosols from Space: Past, Present, and Future. American Meteorological Society. Volumen 80. Issue 11. https://doi.org/10.1175/1520-0477(1999)080<2229:RSOTAF>2.0.CO;2 --- ### Bibliografía Wegmann M., Leutner B., Dech S. (2016) Remote Sensing and GIS for Ecologists Using Open Source Software. Ed. Pelagic Sobrino J.A., Ed. (2000) Teledección. AECI. Zhang M., Hu C., Kowalewski M.G., Janz S.J., Lee Z. & Wei J. (2017) Atmospheric correction of hyperspectral airborne GCAS measurements over the Louisiana Shelf using a cloud shadow approach. International Journal of Remote Sensing. https://doi.org/10.1080/01431161.2017.1280633 Zhengming Wan and J. Dozier (1996) "A generalized split-window algorithm for retrieving land-surface temperature from space," in IEEE Transactions on Geoscience and Remote Sensing, vol. 34, no. 4, pp. 892-905, July 1996, doi: 10.1109/36.508406. --- class: middle 